package jm.nj.demo13mian.demo10;
/*
 * 解决线程安全问题的第二种同步方式:同步方法
 * 1.把访问共享数据的代码,提取出来放在一个方法中
 * 2.在方法上增加一个同步关键字
 *
 * 修饰符 synchronized 返回值类型 方法名(参数列表){
 * 		出现了安全问题的代码
 * 		(使用了共享数据的代码)
 * }
 *
 * 同步方法的锁对象是谁?是本类对象的引用this(RunnableImpl)
 *
 * 方法可以有静态的方法?静态方法的锁对象是谁?
 * 静态方法的锁对象是本类的class属性(反射)
 * RunnableImpl.class
 */
public class RunnableImpl2 implements Runnable {
    private static  int ticket = 100;

    @Override
    public void run() {
        while (true){
             payTicket();
        }
    }
/*
* 搞笑
* */
    private void payTicket() {
        if (ticket>0){
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"...正在买第"+ticket--+"张票");
        }
    }
}
